# #1：编写函数，从键盘输入一个整数，判断其是否为完全数。所谓完全数，
# # 是指这样的数，该数的各因子（除该数本身外）之和正好等于该数本身，
# # 例如：6=1+2+3，28=1+2+4+7+14。
#
# def Function():
#     n = int(input("请输入一个整数："))
#     sum = 0
#     i = 1
#     while i < n:
#         if n%i==0:
#             sum +=i
#         i +=1
#     if sum == n:
#         print("Yes")
#     else:
#         print("No")
#
# if __name__=="__main__":
#     Function()

# #2：编写函数，实现折半查找。例如：a = [56, 52, -96, -53, 23, -789, 520] ，例如查找23，返回5。
#
# def Find(y,lt):
#     l = 0
#     r = n - 1
#     while l <= r:
#         if lt[r] == y:
#             return r
#         if lt[r] == y:
#             return r
#         l +=1
#         r -=1
#
# if __name__=="__main__":
#     n = int(input("请输入数组个数："))
#     lt = list()
#     for i in range(0,n):
#         x = int(input("数组元素："))
#         lt.append(x)
#     lt.sort()
#     y = int(input("请输入需要查的元素："))
#     ret = Find(y,lt)
#     print(ret)

# #3.编写函数，从键盘输入参数x和n，计算并显示形如x+xx +xxx + xxxx + xxxxx+xxx…xxx+ 的表达式前n项的值。
#
# def Add(s):
#     x = int(s[0])
#     n = int(s[1])
#     sum = 0
#     while n>0:
#         num = x
#         i = n-1
#         while i > 0 :
#             num = num*10+x
#             i -=1
#         print(num,end='')
#         if n != 1:
#             print("+",end = '')
#         else:
#             print("=", end='')
#         sum += num
#         n -=1
#     return sum
#
# if __name__=="__main__":
#     s = input("请输入参数x和n，用空格分开：")
#     s = s.split()
#     ret = Add(s)
#     print(ret)

#4.模拟歌手打分程序。在歌咏比赛中，打分流程为评委对歌手打分，计算平均分时，需要去掉一个最高分，
# 去掉一个最低分，然后输出平均分。编写一个歌手打分程序，输入评委的打分（评委至少有3人），输出平均分。
# （要求：用两种方法实现，一种用普通函数实现，其中一种核心部分用带可变参数的函数实现。）（提示：可以通过map对象进行序列解包）

# def Function(s):
#     lt = list()
#     for i in range(0,len(s)+1,2):
#         lt.append(int(s[i]))
#     lt.sort()
#     print(f"去掉一份最低分：{lt[0]}")
#     print(f"去掉一个最高分：{lt[len(lt)-1]}")
#     lt.pop(len(lt)-1)
#     lt.pop(0)
#     print(f"该歌手的有效打分为{lt}")
#     sum = 0
#     for i in range(0,len(lt)):
#         sum +=lt[i]
#     sum = sum/len(lt)
#     print(f"该歌手得分为{sum}")
#
#
#
# if __name__=="__main__":
#     s = input("请输入至少三名裁判的打分（用逗号隔开）:")
#     Function(s)

# def Fun(scores_str):
#     # 使用map将输入的字符串列表转换成浮点数列表
#     scores = list(map(float, scores_str.split(',')))
#
#     max_score = max(scores)
#     min_score = min(scores)
#
#     scores.remove(max_score)
#     scores.remove(min_score)
#     average_score = sum(scores) / len(scores)
#
#     return max_score, min_score, average_score
#
#
# if __name__ == "__main__":
#     scores_input = input("请输入评委的打分，用逗号隔开：")
#
#     max_score, min_score, average_score = Fun(scores_input)
#     print(f"最大分数是：{max_score:.2f}")
#     print(f"最小分数是：{min_score:.2f}")
#     print(f"平均分是：{average_score:.2f}")



#5.用lambda求解复合函数：。
#（参考定积分的定义法：面积矩形法，积分区间100万份）
#（需要和数学的结果进行对比结果，误差多大？）
# 矩形法计算定积分的近似值


# import math
# def Fun(func, a, b, n):
#     width = (b - a) / n
#     integral = sum(func(a + i * width) * width for i in range(n))
#     return integral
#
# integrand = lambda x: math.sqrt(1 - math.sin(2 * x))
#
# # 积分区间
# a = 0
# b = math.pi / 2
#
# n = 1000000
# m = Fun(integrand, a, b, n)
#
# # 输出近似值
# print(f"复合函数在区间[{a}, {b}]上的定积分近似值为: {m:.6f}")
#
# diff = (math.sqrt(2) / 2) * (math.sin(math.pi / 4) - math.cos(math.pi / 4) + 1)
#
# # 输出精确值
# print(f"复合函数在区间[{a}, {b}]上的定积分精确值为: {diff:.6f}")
#
# # 计算误差
# error = abs(m - diff)
# print(f"误差为: {error:.6f}")